]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
app: Consider "quit" action for quit
authorFlorian Müllner <fmuellner@gnome.org>
Tue, 5 Feb 2019 01:32:52 +0000 (02:32 +0100)
committerFlorian Müllner <florian.muellner@gmail.com>
Thu, 28 Mar 2019 00:02:20 +0000 (00:02 +0000)
Just like we take a remote "new-window" action into account for
opening new windows, we should call an explicit "quit" action
before falling back to closing all the app's windows on quit.

https://gitlab.gnome.org/GNOME/gnome-shell/issues/624

src/shell-app.c

index 7ef3a8156c946e8e5c7161255880a9e7638e93a2..e0759e503a045127995b60cdb156149806f14e1c 100644 (file)
@@ -1183,13 +1183,26 @@ _shell_app_handle_startup_sequence (ShellApp            *app,
 gboolean
 shell_app_request_quit (ShellApp   *app)
 {
+  GActionGroup *group = NULL;
   GSList *iter;
 
   if (shell_app_get_state (app) != SHELL_APP_STATE_RUNNING)
     return FALSE;
 
-  /* TODO - check for an XSMP connection; we could probably use that */
+  /* First, check whether the app exports an explicit "quit" action
+   * that we can activate on the bus
+   */
+  group = G_ACTION_GROUP (app->running_state->muxer);
+
+  if (g_action_group_has_action (group, "app.quit") &&
+      g_action_group_get_action_parameter_type (group, "app.quit") == NULL)
+    {
+      g_action_group_activate_action (group, "app.quit", NULL);
+
+      return TRUE;
+    }
 
+  /* Otherwise, fall back to closing all the app's windows */
   for (iter = app->running_state->windows; iter; iter = iter->next)
     {
       MetaWindow *win = iter->data;